package thimeeeee.Model;

//import thimeeeee.Skeleton;

public class Bomb extends ElementBase {
	private int timeLeft;  // a bomba robbanásáig hátralévő idő
    private double timeStamp = 0;
    private boolean isExploded = false;
    
    // default konstruktor: ahogy letesszük a bombát, elindítjuk a visszaszámlálást
    public Bomb()
    {
//        Skeleton.Create("Bomb");
//        Skeleton.StartFunc("Bomb()");
        StartTimer();
//        Skeleton.EndFunc("Bomb()", "void");
    }
    // elindítja a bomba időzítőjét, és szól, hogy ha lejárt
	public void StartTimer() 
    {
//        Skeleton.StartFunc("Bomb.StartTimer()");

        timeLeft = 10;

//        Skeleton.EndFunc("Bomb.StartTimer()", "void");
	}

    @Override
    public void Idle(double aTimeStamp)
    {
//        Skeleton.StartFunc("Bomb.Idle()");
        if (aTimeStamp > timeStamp)
        {
            timeLeft--;
            if (timeLeft == 0)
            {
                TimerCallback();
            }
        }
        timeStamp = aTimeStamp;
        
//        Skeleton.EndFunc("Bomb.Idle()", "void");
    }
    // ha lejár az időzítő:
	private void TimerCallback() 
    {
//        Skeleton.StartFunc("Bomb.TimerCallback()");
        isExploded = true;
        
        Field[] ns = this.MyField.GetNeighbors();
        // megsemmísítjük a környék összes megsemmisíthető elemét
        for(int i = 0; i < ns.length; i++)
        {
            ElementBase[] es = ns[i].GetElements();

            if(es != null)
            {
                for(int e=0; e < es.length; e++)
                {
                    if(es[e] != null) es[e].Explode();
                }
            }
        }
        // megsemmisítjük a saját mezőnkön lévő elemeket, kivéve magunkat
        ElementBase myElement[] = this.MyField.GetElements();
        for(int i=0; i < myElement.length; i++)
            {
                if (myElement[i] != this)
                {
                    if(myElement[i] != null) myElement[i].Explode();
                }
 
            }
        // végül megsemmisítjük magunkat is
        this.Kill();

//        Skeleton.EndFunc("Bomb.TimerCallback()", "void");
	}
    // ha a játékos akar a mi mezőnkre lépni:
    @Override
    public boolean MeetPlayer(Player p)
    {
//        Skeleton.StartFunc("Bomb.MeetPlayer()");
//        Skeleton.EndFunc("Bomb.MeetPlayer()","false");
        return false;
    }

    // ha egy szomszédos mezőn bomba robban:
    @Override
    public void Explode()
    {
//        Skeleton.StartFunc("Bomb.Explode()");
        if (!isExploded)
        {
            TimerCallback();
        }

//        Skeleton.EndFunc("Bomb.Explode()","void");

    }
    
    // ha ráesik egy kő, vagy gyémánt
    public boolean MeetFallingElement()
    {
        return false;
    }
}